+2004-03-02 Federico Mena Quintero <federico@ximian.com>
+
+ * gtk/gtkfilechooserdefault.c
+ (gtk_file_chooser_default_set_current_folder): Handle errors in
+ setting the path bar's path. Fixes #136000, based on a patch by
+ Morten Welinder.
+
+ * gtk/gtkfilesystemunix.c (gtk_file_system_unix_insert_bookmark):
+ Don't free our own propagated error.
+
+ * gtk/gtkpathbar.c (gtk_path_bar_set_path): Likewise, and free the
+ parent_path upon error. Fixes #136006, patch by Morten Welinder.
+ (gtk_path_bar_set_path): Unref the file_folder upon error.
+ (gtk_path_bar_set_path): Return a boolean success code.
+
Wed Mar 3 00:28:59 2004 Matthias Clasen <maclas@gmx.de>
* tests/testcombochange.c: Add an animation mode, to test
+2004-03-02 Federico Mena Quintero <federico@ximian.com>
+
+ * gtk/gtkfilechooserdefault.c
+ (gtk_file_chooser_default_set_current_folder): Handle errors in
+ setting the path bar's path. Fixes #136000, based on a patch by
+ Morten Welinder.
+
+ * gtk/gtkfilesystemunix.c (gtk_file_system_unix_insert_bookmark):
+ Don't free our own propagated error.
+
+ * gtk/gtkpathbar.c (gtk_path_bar_set_path): Likewise, and free the
+ parent_path upon error. Fixes #136006, patch by Morten Welinder.
+ (gtk_path_bar_set_path): Unref the file_folder upon error.
+ (gtk_path_bar_set_path): Return a boolean success code.
+
Wed Mar 3 00:28:59 2004 Matthias Clasen <maclas@gmx.de>
* tests/testcombochange.c: Add an animation mode, to test
+2004-03-02 Federico Mena Quintero <federico@ximian.com>
+
+ * gtk/gtkfilechooserdefault.c
+ (gtk_file_chooser_default_set_current_folder): Handle errors in
+ setting the path bar's path. Fixes #136000, based on a patch by
+ Morten Welinder.
+
+ * gtk/gtkfilesystemunix.c (gtk_file_system_unix_insert_bookmark):
+ Don't free our own propagated error.
+
+ * gtk/gtkpathbar.c (gtk_path_bar_set_path): Likewise, and free the
+ parent_path upon error. Fixes #136006, patch by Morten Welinder.
+ (gtk_path_bar_set_path): Unref the file_folder upon error.
+ (gtk_path_bar_set_path): Return a boolean success code.
+
Wed Mar 3 00:28:59 2004 Matthias Clasen <maclas@gmx.de>
* tests/testcombochange.c: Add an animation mode, to test
+2004-03-02 Federico Mena Quintero <federico@ximian.com>
+
+ * gtk/gtkfilechooserdefault.c
+ (gtk_file_chooser_default_set_current_folder): Handle errors in
+ setting the path bar's path. Fixes #136000, based on a patch by
+ Morten Welinder.
+
+ * gtk/gtkfilesystemunix.c (gtk_file_system_unix_insert_bookmark):
+ Don't free our own propagated error.
+
+ * gtk/gtkpathbar.c (gtk_path_bar_set_path): Likewise, and free the
+ parent_path upon error. Fixes #136006, patch by Morten Welinder.
+ (gtk_path_bar_set_path): Unref the file_folder upon error.
+ (gtk_path_bar_set_path): Return a boolean success code.
+
Wed Mar 3 00:28:59 2004 Matthias Clasen <maclas@gmx.de>
* tests/testcombochange.c: Add an animation mode, to test
+2004-03-02 Federico Mena Quintero <federico@ximian.com>
+
+ * gtk/gtkfilechooserdefault.c
+ (gtk_file_chooser_default_set_current_folder): Handle errors in
+ setting the path bar's path. Fixes #136000, based on a patch by
+ Morten Welinder.
+
+ * gtk/gtkfilesystemunix.c (gtk_file_system_unix_insert_bookmark):
+ Don't free our own propagated error.
+
+ * gtk/gtkpathbar.c (gtk_path_bar_set_path): Likewise, and free the
+ parent_path upon error. Fixes #136006, patch by Morten Welinder.
+ (gtk_path_bar_set_path): Unref the file_folder upon error.
+ (gtk_path_bar_set_path): Return a boolean success code.
+
Wed Mar 3 00:28:59 2004 Matthias Clasen <maclas@gmx.de>
* tests/testcombochange.c: Add an animation mode, to test
0);
_gtk_file_chooser_install_properties (gobject_class);
-
+
gtk_settings_install_property (g_param_spec_string ("gtk-file-chooser-backend",
P_("Default file chooser backend"),
P_("Name of the GtkFileChooser backend to use by default"),
{
GtkSettings *settings = gtk_settings_get_default ();
gchar *default_backend = NULL;
-
+
g_object_get (settings, "gtk-file-chooser-backend", &default_backend, NULL);
if (default_backend)
{
const GtkFilePath *path)
{
GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
+ GError *error;
- if (impl->current_folder)
- gtk_file_path_free (impl->current_folder);
+ error = NULL;
+ if (!gtk_path_bar_set_path (GTK_PATH_BAR (impl->browse_path_bar), path, impl->file_system, &error))
+ {
+ error_dialog (impl,
+ _("Could not set current folder: %s"),
+ path, error);
+ return;
+ }
- impl->current_folder = gtk_file_path_copy (path);
+ if (impl->current_folder != path)
+ {
+ if (impl->current_folder)
+ gtk_file_path_free (impl->current_folder);
- /* Change the current folder label */
- gtk_path_bar_set_path (GTK_PATH_BAR (impl->browse_path_bar), path, impl->file_system, NULL);
+ impl->current_folder = gtk_file_path_copy (path);
+ }
/* Update the widgets that may trigger a folder chnage themselves */
g_return_if_fail (resize_horizontally != NULL);
g_return_if_fail (resize_vertically != NULL);
-
+
impl = GTK_FILE_CHOOSER_DEFAULT (chooser_embed);
*resize_horizontally = TRUE;
*resize_vertically = TRUE;
-
+
if (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
impl->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
{
if (!bookmark_list_read (&bookmarks, &err) && err->code != G_FILE_ERROR_NOENT)
{
g_propagate_error (error, err);
- g_error_free (err);
return FALSE;
}
}
-void
+gboolean
gtk_path_bar_set_path (GtkPathBar *path_bar,
const GtkFilePath *file_path,
GtkFileSystem *file_system,
{
GtkFilePath *path;
gboolean first_directory = TRUE;
-
- g_return_if_fail (GTK_IS_PATH_BAR (path_bar));
- g_return_if_fail (file_path != NULL);
- g_return_if_fail (file_system != NULL);
+ gboolean result;
+
+ g_return_val_if_fail (GTK_IS_PATH_BAR (path_bar), FALSE);
+ g_return_val_if_fail (file_path != NULL, FALSE);
+ g_return_val_if_fail (file_system != NULL, FALSE);
+
+ result = TRUE;
gtk_path_bar_clear_buttons (path_bar);
path = gtk_file_path_copy (file_path);
&err);
if (!valid)
{
+ result = FALSE;
g_propagate_error (error, err);
- g_error_free (err);
gtk_file_path_free (path);
break;
}
file_info = gtk_file_folder_get_info (file_folder, path, &err);
if (!file_info)
{
+ result = FALSE;
g_propagate_error (error, err);
- g_error_free (err);
+ g_object_unref (file_folder);
+ gtk_file_path_free (parent_path);
gtk_file_path_free (path);
break;
}
gtk_widget_pop_composite_child ();
path_bar->button_list = g_list_reverse (path_bar->button_list);
+
+ return result;
}
};
GType gtk_path_bar_get_type (void) G_GNUC_CONST;
-void gtk_path_bar_set_path (GtkPathBar *path_bar,
- const GtkFilePath *file_path,
- GtkFileSystem *file_system,
- GError **error);
+gboolean gtk_path_bar_set_path (GtkPathBar *path_bar,
+ const GtkFilePath *file_path,
+ GtkFileSystem *file_system,
+ GError **error);
G_END_DECLS
#endif /* __GTK_PATH_BAR__ */